JavaScript Primer 演算子
https://gyazo.com/51ccf23737c36fe563a7c90cb8c3b2e0
読書メモ
オペランドを数値に変換
数値以外も数値へと変換
文字列から数値への変換に使うべきではない → 明示的な変換方法が存在する
console.log(+1); // => 1
数値に変換できない文字列などはNaNに変換
code:js
// 自分自身とも一致しない
console.log(NaN === NaN); // => false
// Number型である
console.log(typeof NaN); // => "number"
// Number.isNaNでNaNかどうかを判定
console.log(Number.isNaN(NaN)); // => true
後置インクリメント演算子num++
numの評価結果を返す
numに対して+1する
返す値は+1する前の値となる.
前置インクリメント演算子 ++num
numに対して+1する
numの評価結果を返す
返す値は+1した後の値となる
↑デクリメントも同じ性質
同じ型で同じ値である場合
オブジェクトの参照が同じである場合
異なる型または異なる値である場合
オブジェクトの参照が異なる場合
===を反転した結果を返す演算子
オブジェクトは参照が一致しているならtrueを返す
同じデータ型のオペランドを比較する場合は,厳密等価演算子===と同じ結果
オペランドが異なる場合→暗黙的に型変換してから比較
闇深そう
code:js
// 文字列を数値に変換してから比較
console.log(1 == "1"); // => true
// "01"を数値にすると1となる
console.log(1 == "01"); // => true
// 真偽値を数値に変換してから比較
console.log(0 == false); // => true
// nullの比較はfalseを返す
console.log(0 == null); // => false
// nullとundefinedの比較は常にtrueを返す
console.log(null == undefined); // => true
基本的に使うべきでない
null とundefinedをまとめて判断する時は使う
数値であるnumをbitの数だけ右へシフトする
右にあふれたビットは破棄され,0のビットを左から詰める
つまり符号は保持されず,常に正の値になりそう
code:js
console.log((-9) >>> 2); // => 1073741821
// 0b11111111111111111111111111110111 >>> 2; // => 0b00111111111111111111111111111101
配列やオブジェクトの値を複数の変数へ同時に代入
code:js
// aにはarrayの0番目の値、bには1番目の値が代入される
console.log(a); // => 1
console.log(b); // => 2
code:js
const obj = {
"key": "value"
};
// プロパティ名keyの値を、変数keyとして定義する
const { key } = obj;
console.log(key); // => "value"
左辺の値の評価結果がtrueならば,右辺の評価結果を返す
左辺の値の評価結果がfalseならば,そのまま左辺の値を返す
つまり左辺がfalseの場合,右辺は評価されない
要はAND
false
undefined
null
0
0n
NaN
""(空文字列)
constを使って宣言と同時に代入可能
スマート
code:js
function addPrefix(text, prefix) {
// prefixが指定されていない場合は"デフォルト:"を付ける
const pre = typeof prefix === "string" ? prefix : "デフォルト:";
return pre + text;
}
console.log(addPrefix("文字列")); // => "デフォルト:文字列"
console.log(addPrefix("文字列", "カスタム:")); // => "カスタム:文字列"
ifだとconstが使えない
code:js
function addPrefix(text, prefix) {
let pre = "デフォルト:";
if (typeof prefix === "string") {
pre = prefix;
}
return pre + text;
}
console.log(addPrefix("文字列")); // => "デフォルト:文字列"
console.log(addPrefix("文字列", "カスタム:")); // => "カスタム:文字列"